package com.qinggeng.project.system.service;

import com.qinggeng.framework.config.mq.dto.MessageBeatDTO;
import com.qinggeng.project.api.dto.BeatNewsDto;
import com.qinggeng.project.api.dto.BeatOrdersInfoDto;
import com.qinggeng.project.api.dto.UserBeatDto;
import com.qinggeng.project.system.domain.UserBeat;

import java.util.List;

/**
 * @author 吴鹏飞
 * @date 2020/10/29
 * 用户捶一捶业务
 */
public interface UserBeatService {
    /**
     * 查询所有符合条件的用户记录
     * @param userBeatDto
     * @return
     */
    List<UserBeatDto> selectUserBeatList(UserBeatDto userBeatDto);

    /**
     * 更新捶成时间
     * @param ordersId
     */
    void updateUserBeatByOrdersId(Long ordersId);

    /**
     * 根据用户id查询当天所捶次数
     * @param userId
     * @return
     */
    int selectCountTodayByUserId(Long userId);

    /**
     * 根据捶成条件查询所有捶成记录
     * @param beatInto
     * @return
     */
    List<BeatNewsDto> selectUserBeatSuccessList(String beatInto);

    /**
     * 根据订单id获取用户捶一捶和本人信息
     * @param ordersId
     * @return
     */
    BeatOrdersInfoDto selectUserBeatAndUserInfoByOrdersId(Long ordersId);

    /**
     * 查询超时未捶成用户捶一捶记录
     */
    List<UserBeat> selectOutTimeUserBeatList();

    /**
     * 更新用户捶一捶信息
     * @param userBeat
     */
    int updateUserBeat(UserBeat userBeat);

    /**
     * 根据用户id查询当天所捶的商品id集合
     * @param userId
     * @return
     */
    List<Long> selectMainCategorysByNowAndUserId(Long userId);

    /**
     * 根据订单id查询捶一捶信息
     * @param ordersId
     * @return
     */
    UserBeat selectUserBeatByOrdersId(Long ordersId);

    /**
     * 捶一捶失败处理
     * @param messageBeatDto
     */
    void updateUserBeatForFail(MessageBeatDTO messageBeatDto);

    /**
     * 领取商品
     * @param ordersId
     * @return
     */
    boolean receiveGoods(Long ordersId);

    /**
     * 查询用户捶一捶记录
     *
     * @param id 用户捶一捶记录ID
     * @return 用户捶一捶记录
     */
    public UserBeat selectUserBeatById(Long id);

    /**
     * 查询用户捶一捶记录列表
     *
     * @param userBeat 用户捶一捶记录
     * @return 用户捶一捶记录集合
     */
    public List<UserBeat> selectUserBeatList(UserBeat userBeat);


    /**
     * 批量删除用户捶一捶记录
     *
     * @param ids 需要删除的用户捶一捶记录ID
     * @return 结果
     */
    public int deleteUserBeatByIds(Long[] ids);

    /**
     * 删除用户捶一捶记录信息
     *
     * @param id 用户捶一捶记录ID
     * @return 结果
     */
    public int deleteUserBeatById(Long id);
}
